"""
类名：EmpApi
实例属性：emp_url，保存网址"http://ihrm-test.itheima.net/api/sys/user"
实例方法：
    def __init__(self):
        # 添加属性
    def add_emp(self, body, headers):
        # 功能：添加员工
        # :param body: 添加员工的请求体
        # :param headers: 请求头
        # :return: 响应对象
    def query_emp(self, query, headers):
        # 功能：查询指定id的员工
        # :param query: 员工的id号
        # :param headers: 请求头
        # :return: 响应对象
    def modify_emp(self, body, query, headers):
        # 功能：修改指定id的员工
        # :param body: 修改员工的请求体
        # :param query: 员工的id号
        # :param headers: 请求头
        # :return: 响应对象
    def delete_emp(self, query, headers):
        # 功能：删除指定id的员工
        # :param query: 员工的id号
        # :param headers: 请求头
        # :return: 响应对象
"""

# 1. 导入unittest包
import unittest
import requests
from login_api import LoginApi


class EmpApi:
    def __init__(self):
        # 实例属性，网址
        self.emp_url = "http://ihrm-test.itheima.net/api/sys/user"

    def add_emp(self, body, headers):
        """
        # 功能：添加员工
        # :param body: 添加员工的请求体
        # :param headers: 请求头
        # :return: 响应对象
        """
        return requests.post(self.emp_url, json=body, headers=headers)

    def query_emp(self, query, headers):
        """
        # 功能：查询指定id的员工
        # :param query: 员工的id号
        # :param headers: 请求头
        # :return: 响应对象
        """
        return requests.get(self.emp_url + '/' + query, headers=headers)

    def modify_emp(self, body, query, headers):
        """
        # 功能：修改指定id的员工
        # :param body: 修改员工的请求体
        # :param query: 员工的id号
        # :param headers: 请求头
        # :return: 响应对象
        """
        return requests.put(self.emp_url + '/' + query, json=body, headers=headers)

    def delete_emp(self, query, headers):
        """
        # 功能：删除指定id的员工
        # :param query: 员工的id号
        # :param headers: 请求头
        # :return: 响应对象
        """
        return requests.delete(self.emp_url + '/' + query, headers=headers)


# 2. 自定义测试类
# 注意: 必须继承自 unittest.TestCase
class TestEmp(unittest.TestCase):
    """测试类"""

    # 3. 自定义测试方法
    def test_emp(self):
        body = {
            "mobile": "13800000002",
            "password": "123456"
        }

        # 0. 获取登陆成功的认证请求头
        login_api = LoginApi()  # 实例化对象
        headers = login_api.get_au_headers(body)  # 实例化对象调用实例方法
        print(f'headers = {headers}')

        # 实例化员工管理API对象
        emp_api = EmpApi()

        # 1. 添加员工(手机号唯一)，断言
        # 测试数据
        mobile = '11122223333'  # 手机号
        body = {"username": "mikejiang",
                "mobile": mobile,
                "timeOfEntry": "2021-08-02",
                "formOfEmployment": 1,
                "workNumber": "001",
                "departmentName": "偷偷学习组",
                "departmentId": "1422400509205118976",
                "correctionTime": "2021-08-30T16:00:00.000Z"}

        # 发送请求
        response = emp_api.add_emp(body, headers)
        json_data = response.json()
        print(f'添加员工：{json_data}')

        # 断言
        self.assertEqual(200, response.status_code)
        self.assertEqual(True, json_data.get("success"))
        self.assertEqual(10000, json_data.get("code"))
        self.assertIn("操作成功", json_data.get("message"))

        # 提取员工id
        query = json_data.get('data').get('id')
        print(f'员工id：{query}')

        # 2. 查询员工，断言
        # 发请求
        response = emp_api.query_emp(query, headers)
        json_data = response.json()
        print(f'查询员工：{json_data}')
        # 断言
        self.assertEqual(200, response.status_code)
        self.assertEqual(True, json_data.get("success"))
        self.assertEqual(10000, json_data.get("code"))
        self.assertIn("操作成功", json_data.get("message"))

        # 3. 修改员工，断言
        # 发请求
        body = {"username": "yyds"}
        response = emp_api.modify_emp(body, query, headers)
        json_data = response.json()
        print(f'修改员工：{json_data}')
        # 断言
        self.assertEqual(200, response.status_code)
        self.assertEqual(True, json_data.get("success"))
        self.assertEqual(10000, json_data.get("code"))
        self.assertIn("操作成功", json_data.get("message"))

        # 4. 删除员工，断言
        # 发请求
        response = emp_api.delete_emp(query, headers)
        json_data = response.json()
        print(f'删除员工：{json_data}')
        # 断言
        self.assertEqual(200, response.status_code)
        self.assertEqual(True, json_data.get("success"))
        self.assertEqual(10000, json_data.get("code"))
        self.assertIn("操作成功", json_data.get("message"))
